package com.movie.mapper;

import com.movie.dto.MovieDTO;
import com.movie.entity.Rating;
import org.apache.ibatis.annotations.Param;

import java.util.List;

public interface MovieMapper {

    List<MovieDTO> selectAllMoviesWithUserInfo(@Param("userId") Integer userId);

    MovieDTO selectMovieDetail(@Param("id") Integer id, @Param("userId") Integer userId);

    List<Rating> selectMovieComments(@Param("movieId") Integer movieId);

    List<MovieDTO> selectMoviesByKeyword(@Param("keyword") String keyword);

    List<MovieDTO> selectMoviesByCategory(@Param("category") String category, @Param("userId") Integer userId);

    List<MovieDTO> selectTopRatedMovies(@Param("limit") Integer limit);

    void updateMovieAvgRating(@Param("movieId") Integer movieId);

    void updateMovieAvgRatingWithValue(@Param("movieId") Integer movieId, @Param("avg") Double avg);

    // ⭐ 新增方法：根据用户ID获取最常收藏/评分的分类
    String findFavoriteCategoryByUser(@Param("userId") Integer userId);

    // ⭐ 新增方法：根据分类推荐电影
    List<MovieDTO> selectMoviesByCategoryWithoutUser(@Param("category") String category);

    // 推荐：某个分类下的电影，排除用户已经评分过的
    List<MovieDTO> findMoviesByCategoryExcludeRated(@Param("category") String category,
                                                 @Param("userId") Integer userId);

}
